From d7653e7c0cffc64ccc82edadc5b3c12d8129cd73 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 23 Oct 2010 22:51:38 +0200 Subject: [PATCH] Add a unique->GtkApplication migration guide --- docs/reference/gtk/Makefile.am | 2 + docs/reference/gtk/gtk-docs.sgml | 1 + .../gtk/migrating-GtkApplication.xml | 127 ++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 docs/reference/gtk/migrating-GtkApplication.xml diff --git a/docs/reference/gtk/Makefile.am b/docs/reference/gtk/Makefile.am index 162eb2e50e..9b065dd5ac 100644 --- a/docs/reference/gtk/Makefile.am +++ b/docs/reference/gtk/Makefile.am @@ -121,6 +121,7 @@ content_files = \ glossary.xml \ migrating-2to3.xml \ migrating-checklist.sgml \ + migrating-GtkApplication.xml \ objects_grouped.sgml \ osx.sgml \ question_index.sgml \ @@ -142,6 +143,7 @@ expand_content_files = \ glossary.xml \ migrating-2to3.xml \ migrating-checklist.sgml \ + migrating-GtkApplication.xml \ question_index.sgml \ text_widget.sgml \ tree_widget.sgml diff --git a/docs/reference/gtk/gtk-docs.sgml b/docs/reference/gtk/gtk-docs.sgml index 519879eed2..38e057fe8a 100644 --- a/docs/reference/gtk/gtk-docs.sgml +++ b/docs/reference/gtk/gtk-docs.sgml @@ -330,6 +330,7 @@ + diff --git a/docs/reference/gtk/migrating-GtkApplication.xml b/docs/reference/gtk/migrating-GtkApplication.xml new file mode 100644 index 0000000000..828b27664e --- /dev/null +++ b/docs/reference/gtk/migrating-GtkApplication.xml @@ -0,0 +1,127 @@ + + + + + Migrating from libunique to GApplication or GtkApplication + + + libunique offers 'unique application' support as well as ways to + communicate with a running application instance. This is implemented + in various ways, either using D-Bus, or socket-based communication. + + + + Starting with GLib 2.26, D-Bus support has been integrated into GIO + in the form of GDBus, and #GApplication has been added to provide + the same level of application support as libunique. + + + A unique application + Here is a simple application using libunique: + +int +main (int argc, char *argv[]) +{ + UniqueApp *app; + GtkWidget *window; + + gtk_init (&argc, &argv); + + app = unique_app_new ("org.gtk.TestApplication", NULL); + + if (unique_app_is_running (app)) + { + UniqueResponse response; + + response = unique_app_send_message (app, UNIQUE_ACTIVATE, NULL); + g_object_unref (app); + + return response == UNIQUE_RESPONSE_OK ? 0 : 1; + } + + window = create_my_window (); + + unique_app_watch_window (app, GTK_WINDOW (window)); + + gtk_widget_show (window); + + gtk_main (); + + g_object_unref (app); + + return 0; +} + +The same application using GtkApplication: + +static void +activate (GtkApplication *app) +{ + GtkWidget *window; + + window = create_my_window (); + gtk_window_set_application (GTK_WINDOW (window), app); + gtk_widget_show (window); +} + +int +main (int argc, char *argv[]) +{ + GtkApplication *app; + gint status; + + app = gtk_application_new ("org.gtk.TestApplication", 0); + g_signal_connect (app, "activate", G_CALLBACK (activate), NULL); + + status = g_application_run (app); + + g_object_unref (app); + + return status; +} + + + +
Uniqueness + + Instead of creating a #UniqueApp with unique_app_new(), create + a #GApplication with g_application_new() or a #GtkApplication + with gtk_application_new(). The @name that was used with + unique_app_new() is very likely usable as the @application_id for + g_application_new() without any changes, and GtkApplication passes + the DESKTOP_STARTUP_ID environment variable + automatically. + + + While libunique expects you to check for an already running instance + yourself and activate it manually, GApplication handles all this on + its own in g_application_run(). If you still need to find out if there + is a running instance of your application, use + g_application_get_is_remote() instead of unique_app_is_running(). + +
+ +
Commands and Messages + + libunique lets you send messages with commands to a running + instance using unique_app_send_message(). GApplication does not + have a direct equivalent for this feature at this time, but + some of the predefined libunique commands have equivalents in + GApplication. Instead of sending the %UNIQUE_ACTIVATE command, + call g_application_activate(), instead of sending the + %UNIQUE_OPEN command, call g_application_open(). The + %UNIQUE_NEW and %UNIQUE_CLOSE and user-defined commands don't + have direct replacement at this time. + + + + One the other hand, GApplication supports passing entire + commandlines to the running instance, which reduces the need + for user-defined commands. And GDBus makes it very easy to + implement D-Bus interfaces for communication between + application instances, see e.g. g_dbus_connection_register_object(). + +
+
-- 2.30.2